<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //ES6里的继承

      //ES5里的继承
      // function Dad(name, age) {
      //   this.name = name;
      //   this.age = age;
      // }
      // Dad.prototype.fn = function () {
      //   console.log("dad的fn方法");
      // };
      // //继承构造函数
      // function Son(name, age) {
      //   Dad.call(this, name, age);
      // }
      // //继承原型
      // Link.prototype = Dad.prototype;
      // function Link() {}
      // Son.prototype = new Link(); //会覆盖原本的constructor属性
      // //需要把Son默认的constructor再指回来
      // Son.prototype.constructor = Son;

      // let zhangsan = new Son("张三", 20);
      // console.log(zhangsan);
      // zhangsan.fn();

      //
      //
      //
      //
      // ES6的继承 关键字extends  扩展
      // class Dad {
      //   constructor(name, age) {
      //     this.name = name;
      //     this.age = age;
      //   }
      //   fn() {
      //     console.log("dad里的fn方法");
      //   }
      // }
      // class Son extends Dad {}
      // let zhangsan = new Son("张三", 20);
      // console.log(zhangsan);
      // zhangsan.fn();

      //继承里的super
      //1.super只能出现在子类  如果子类没有写constructor 那么super可以省略
      //2.子类如果有constructor那么必须调用super函数  super函数可以用于父类的传参
      //3.super必须要在子类this之前调用,且不能单独使用，且不能单独使用
      //4.super可以在子类构造函数及方法里面使用
      class Dad {
        constructor(name, age) {
          this.name = name;
          this.age = age;
        }
        fn() {
          console.log("dad里的fn方法");
        }
      }
      class Son extends Dad {
        constructor(name, age) {
          super(name, age);
          //console.log(super);//'super' keyword unexpected here

          this.height = "180cm";
        }
        sonfn() {
          super.fn(); //通过super调用父类fn方法
        }
      }
      let zhangsan = new Son("张三", 20);
      // console.log(zhangsan);
      // zhangsan.fn();
      zhangsan.sonfn();
    </script>
  </body>
</html>
